// 跨域配置
// 动态获取环境配置，避免在模块加载时访问 import.meta.env
const getEnvConfig = () => {
  const env = process.env.NODE_ENV || 'development'
  
  const envConfig = {
    development: {
      // 开发环境配置
      backendUrl: 'http://localhost:8080',
      wsUrl: 'ws://localhost:8080',
      mockEnabled: false, // 禁用 Mock，使用真实后端数据
      debug: true
    },
    production: {
      // 生产环境配置
      backendUrl: 'https://your-production-api.com',
      wsUrl: 'wss://your-production-api.com',
      mockEnabled: false,
      debug: false
    },
    test: {
      // 测试环境配置
      backendUrl: 'https://your-test-api.com',
      wsUrl: 'wss://your-test-api.com',
      mockEnabled: false,
      debug: true
    }
  }
  
  return {
    env,
    config: envConfig[env] || envConfig.development
  }
}

// 获取当前环境配置
const { env, config: currentEnv } = getEnvConfig()

// 跨域代理配置
export const corsConfig = {
  // 基础配置
  base: {
    // 当前环境
    env,
    // 是否启用调试
    debug: currentEnv.debug,
    // 是否启用 Mock
    mockEnabled: currentEnv.mockEnabled
  },

  // 代理配置
  proxy: {
    // API 接口代理 (匹配后端 /api/user 等路径)
    api: {
      path: '/api',
      target: currentEnv.backendUrl,
      changeOrigin: true,
      rewrite: path => path.replace(/^\/api/, '/api'), // 保持 /api 前缀
      // 请求头配置
      headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
        'Access-Control-Allow-Headers': 'Content-Type, Authorization, X-Requested-With'
      }
    },

    // 文件上传代理
    upload: {
      path: '/api/upload',
      target: currentEnv.backendUrl,
      changeOrigin: true,
      rewrite: path => path.replace(/^\/api\/upload/, '/api/upload')
    },

    // WebSocket 代理
    websocket: {
      path: '/ws',
      target: currentEnv.wsUrl,
      ws: true,
      changeOrigin: true
    },

    // 静态资源代理
    static: {
      path: '/static',
      target: currentEnv.backendUrl,
      changeOrigin: true,
      rewrite: path => path.replace(/^\/static/, '')
    }
  },

  // CORS 配置
  cors: {
    // 允许的域名
    allowedOrigins: [
      'http://localhost:3000',
      'http://localhost:8080',
      'https://your-production-domain.com'
    ],
    
    // 允许的方法
    allowedMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
    
    // 允许的请求头
    allowedHeaders: [
      'Content-Type',
      'Authorization',
      'X-Requested-With',
      'X-Forwarded-For',
      'X-Real-IP'
    ],
    
    // 是否允许携带凭证
    allowCredentials: true,
    
    // 预检请求缓存时间
    maxAge: 86400
  },

  // 请求配置
  request: {
    // 超时时间
    timeout: 10000,
    
    // 重试次数
    retryTimes: 3,
    
    // 重试延迟
    retryDelay: 1000,
    
    // 请求头
    headers: {
      'Content-Type': 'application/json',
      'X-Requested-With': 'XMLHttpRequest'
    }
  },

  // 错误处理配置
  errorHandling: {
    // 网络错误重试
    networkRetry: true,
    
    // 401 自动跳转登录
    autoRedirectOn401: true,
    
    // 错误消息显示时间
    errorMessageDuration: 3000,
    
    // 是否显示详细错误信息
    showDetailedError: currentEnv.debug
  },

  // 安全配置
  security: {
    // CSRF Token 配置
    csrf: {
      enabled: true,
      headerName: 'X-CSRF-Token',
      cookieName: 'csrf-token'
    },
    
    // 请求频率限制
    rateLimit: {
      enabled: true,
      maxRequests: 100,
      timeWindow: 60000 // 1分钟
    }
  }
}

// 获取代理配置（用于 Vite 配置）
export const getProxyConfig = () => {
  const { proxy } = corsConfig
  
  return {
    [proxy.api.path]: {
      target: proxy.api.target,
      changeOrigin: proxy.api.changeOrigin,
      rewrite: proxy.api.rewrite,
      configure: (proxy, options) => {
        proxy.on('proxyReq', (proxyReq, req, res) => {
          // 添加自定义请求头
          Object.entries(proxy.api.headers).forEach(([key, value]) => {
            proxyReq.setHeader(key, value)
          })
          
          // 添加真实 IP
          proxyReq.setHeader('X-Forwarded-For', req.connection.remoteAddress)
          proxyReq.setHeader('X-Real-IP', req.connection.remoteAddress)
        })
      }
    },
    [proxy.upload.path]: {
      target: proxy.upload.target,
      changeOrigin: proxy.upload.changeOrigin,
      rewrite: proxy.upload.rewrite
    },
    [proxy.websocket.path]: {
      target: proxy.websocket.target,
      ws: proxy.websocket.ws,
      changeOrigin: proxy.websocket.changeOrigin
    },
    [proxy.static.path]: {
      target: proxy.static.target,
      changeOrigin: proxy.static.changeOrigin,
      rewrite: proxy.static.rewrite
    }
  }
}

// 获取当前环境的 API 配置
export const getApiConfig = () => {
  return {
    baseURL: '', // 使用相对路径，让代理处理
    timeout: corsConfig.request.timeout,
    headers: corsConfig.request.headers
  }
}

// 验证跨域配置
export const validateCorsConfig = () => {
  const errors = []
  
  // 检查必要的配置
  if (!currentEnv.backendUrl) {
    errors.push('后端地址未配置')
  }
  
  if (!corsConfig.cors.allowedOrigins.length) {
    errors.push('允许的域名未配置')
  }
  
  if (errors.length > 0) {
    console.warn('⚠️ 跨域配置验证失败:', errors)
    return false
  }
  
  console.log('✅ 跨域配置验证通过')
  return true
}

// 导出默认配置
export default corsConfig 